package com.gem.day03;

/**
 * 本类用来演示Java方法定义
 * 
 * 关于方法调用:
 * 1.直接调用：直接写方法名调用
 * 	  同一个类中,static方法只能直接调用static方法,非static方法可以直接调用任意方法
 * 
 * 2.赋值调用：调用方法，在方法前面定义变量，接收方法返回值
 * 	  例如: int result2 = add(3, 4);
 *   注意:void类型的方法不能使用赋值调用
 * 
 * @author easonsy
 * 2020年7月20日 下午3:43:16
 */
public class MethodDemo {
	public static void main(String[] args) {

		//静态方法在本类中可以直接调用方法,其他类通过类名.方法名的方式调用
		//isPrime(13);

		//非静态方法需要通过创建对象,然后通过对象名来调用
		MethodDemo md = new MethodDemo();
		boolean result = md.isPrime(13);
		//...
		System.out.println(result);

		int result2 = add(3, 4);
		System.out.println(result2 / 100.0);

		//调用可变长参数的方法
		int result3 = add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
		System.out.println(result3);
	}

	/**
	 * 定义方法
	 * 
	 * 修饰符 返回类型 方法名(参数列表){...}
	 * 
	 * 
	 * 返回类型:调用该方法后得到的的数据类型
	 * void 					表示没有返回值,一般void类型的方法只有两种功能(打印/设置方法)
	 * 其他类型			表示调用该方法后会得到一个指定返回类型的数据,供继续使用
	 * 							使用return来返回数据
	 * 注意:
	 * 1.return后面值的数据类型必须<=方法定义的返回类型
	 * 2.如果方法的返回类型不是void,则一定有return语句;
	 *    如果方法有return语句,不一定说明该方法的返回类型是void
	 * 
	 * 
	 * 参数列表:
	 * 方法执行时需要的"原料"
	 * 
	 * 注意:
	 * 1.方法不一定有参数列表
	 * 2.Java中支持动态参数(可变长参数)
	 */
	//静态方法static
	//在本类中直接方法名调用,在其他类中通过类名.方法名调用(其他包中需要import)
	//public static void isPrime(int num) {

	//非静态方法
	//本类和其他类都是先创建对象后调用(其他包中需要import)
	/*public void isPrime(int num) {
		boolean isPrime = true;
		for (int i = 2; i < num; i++) {
			if (num % i == 0) {
				isPrime = false;
				break;
			}
		}
		if (isPrime) {
			System.out.println(num + "是质数.");
		} else {
			System.err.println(num + "不是质数.");
		}
	}
	
	public static void add(int a, int b) {
		System.out.println(a + b);
	}*/

	//修改方法返回类型
	public boolean isPrime(int num) {
		boolean result = true;
		for (int i = 2; i < num; i++) {
			if (num % i == 0) {
				result = false;
				break;
			}
		}
		return result;
	}

	public static int add(int a, int b) {
		return a + b;
	}

	/**
	 * 可变长参数方法
	 */
	public static int add(int... nums) {
		int result = 0;
		for (int i = 0; i < nums.length; i++) {
			result += nums[i];
		}
		return result;
	}
}
